#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    printf("主进程开始执行程序：%d\n", getpid());

    pid_t pid = fork();

    printf("子进程id：%d\n", pid);
    if (pid == 0)
    {
        //path 为可执行文件的路径
        //argv为可执行文件的参数
        //envp为环境变量
        // 通过execve执行另一个程序: 内部会清空当前进程的内存，然后加载新的程序
        // execve只有执行失败才会返回， 如果找到指定的程序执行，就不会有返回
        char *path = "other";
        char *argv[] = {path,"whhh", NULL};
        execve(path, argv, NULL);
        printf("子进程开始执行程序：%d\n", getpid());
    }else if (pid > 0)
    {
        int status;
        waitpid(pid, &status, 0);
        printf("主进程开始执行程序：%d\n", getpid());
    }
    
    
    printf("主进程结束执行程序：%d\n", getpid());
    exit(EXIT_SUCCESS);
    // return 0;
}
